The Non-Volatile Memory express (NVMe) Specification is a specification for accessing solid-state devices (SSDs) and other target devices attached through a Peripheral Component Interconnect Express (PCIe) bus. The Non-Volatile Memory express (NVMe) Specification defines a register interface, a command set, and memory structures including a single set of administrative command and completion queues and many sets of operational Input/Output (I/O) command and completion queues. However, the NVMe specification provides a block device interface and thus relies on the host resources for command and control to a degree which can present a bottleneck or chokepoint in system performance.
In a system that relies on the host to parse storage commands and traverse file system metadata, the host's resource usages (especially computation power/CPU and storage/Dynamic Random-Access Memory (DRAM)) may be an impediment to overall system performance. The overall latency and throughput of the system can be bound by the capabilities of the host, especially when a new generation of storage devices exhibit tremendous performance improvement. Interface overhead during access to each layer becomes detrimental to achieving improved performance. Additionally, because the host processes storage commands and traverses file system metadata to identify the data responsive to the storage command, all file system metadata and data necessary to process the storage command has to go across the PCIe interface to the Host. There also may be a waste of data traffic when storage media is byte-addressable and metadata is handled in a block format.
In view of the foregoing, it may be understood that there may be significant problems and shortcomings associated with current technologies for providing storage access functionality over a PCIe interface. Additionally, there may be shortcomings with future byte-addressable storage technologies.